﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.Serialization;
[DataContract]//원래는 통재로 전송하는 등의 방식을 고려했지만, 클라이언트의 컨트롤조작을 서버에서 할수있음
public class User
{
    int muindo = 0;//일단 무인도 체류는 0으로 만듬
    string id;//이름
    int money;//현금
    int position;//위치
    [DataMember]
    public Area Area
    {
        set;
        get;
    }
    public bool Enabled
    {
        set;
        get;
    }
    public User(string id)
    {
        this.id = id;
        position = 0;//첫출발지.
        Fortunes = new Dictionary<string,Estate>();
    }
    ICallback callback;//각 유저에 해당하는 콜백
    public ICallback Callback
    {
        get { return callback; }
        set { callback = value; }
    }
    [DataMember]
    public string Id
    {
        set { id = value; }
        get { return id; }
    }
    [DataMember]
    public int Money
    {
        set { money = value; }
        get { return money; }
    }
    public Dictionary<string,Estate> Fortunes//유저의 재산목록
    {
        set;
        get;
    }
    [DataMember]
    public int Position//위치
    {
        set { position = value; }
        get { return position; }
    }
    [DataMember]
    public int Muindo
    {
        get { return muindo; }
        set { muindo = value; }
    }
/*    public bool BuyEstateLodging(Estate estate, Lodging lodging)
    {
        if (estate.Owner.id == id)
        {
            LogMessage("땅주인:" + estate.Owner.id);
            switch (lodging)
            {
                case Lodging.Inn:
                    if (estate.Inn == false)
                    {
                        estate.Inn = true;
                        money -= (int)Lodging.Inn;
                        return true;
                    }
                    else
                    {
                        LogMessage("이미 지어져 있습니다.");
                    }
                    break;
                case Lodging.Condo:
                    if (estate.Condo == false)
                    {
                        estate.Condo = true;
                        money -= (int)Lodging.Condo;
                    }
                    else
                    {
                        LogMessage("이미 지어져 있습니다.");
                    }
                    break;
                case Lodging.Hotel:
                    if (estate.Hotel == false)
                    {
                        estate.Hotel = true;
                        money -= (int)Lodging.Hotel;
                        return true;
                    }
                    else
                    {
                        LogMessage("이미 지어져 있습니다.");
                    }
                    break;
            }
            return false;
        }
        LogMessage("집주인이 아닙니다.");
        return false;
    }
    */
    public override string ToString()
    {
        return id;
    }
    public override bool Equals(object obj)
    {
        return id == (obj as User).id;
    }
    public override int GetHashCode()
    {
        return id.GetHashCode();
    }
    [Conditional("DEBUG")]
    private static void LogMessage(string message)
    {
        Console.Write(message);
        Console.CursorLeft = 40;
        Console.WriteLine(DateTime.Now);
    }
}